<?php
namespace Amis\form;
/**
 * 图片格式输入，需要实现接收器，提交时将以 url 的方式提交，如果需要以表单方式提交请使用 InputFile。
 */
class InputImage extends FormItem
{
    public string $type = 'input-image';

    /**
     * @param string $apiUrl
     * @return $this
     */
    public function receiver(string $apiUrl = '')
    {
        $this->receiver = $apiUrl;
        return $this;
    }

    /**
     * 支持的图片类型格式，请配置此属性为图片后缀，例如.jpeg,.jpg,.png,.gif
     * @param string $accept
     * @return $this
     */
    public function accept(string $accept = '.jpeg,.jpg,.png,.gif')
    {
        $this->accept = $accept;
        return $this;
    }

    /**
     *    默认没有限制，当设置后，文件大小大于此值将不允许上传。单位为B
     * @param int $maxSize
     * @return $this
     */
    public function maxSize(int $maxSize)
    {
        $this->maxSize = $maxSize;
        return $this;
    }

    /**
     * 默认没有限制，当设置后，一次只允许上传指定数量文件。
     * @param int $maxLength
     * @return $this
     */
    public function maxLength(int $maxLength)
    {
        $this->maxLength = $maxLength;
        return $this;
    }

    /**
     * 是否多选
     * @param bool $multiple
     * @return $this
     */
    public function multiple(bool $multiple = false)
    {
        $this->multiple = $multiple;
        return $this;
    }

    /**
     * 拼接值
     * @param bool $joinValues
     * @return $this
     */
    public function joinValues(bool $joinValues = true)
    {
        $this->joinValues = $joinValues;
        return $this;
    }

    /**
     *    提取值
     * @param bool $extractValue
     * @return $this
     */
    public function extractValue(bool $extractValue = false)
    {
        $this->extractValue = $extractValue;
        return $this;
    }

    /**
     *    拼接符
     * @param string $delimiter
     * @return $this
     */
    public function delimiter(string $delimiter = ',')
    {
        $this->delimiter = $delimiter;
        return $this;
    }

    /**
     * 否选择完就自动开始上传
     * @param bool $autoUpload
     * @return $this
     */
    public function autoUpload(bool $autoUpload = true)
    {
        $this->autoUpload = $autoUpload;
        return $this;
    }

    /**
     * 隐藏上传按钮
     * @param bool $hideUploadButton
     * @return $this
     */
    public function hideUploadButton(bool $hideUploadButton = false)
    {
        $this->hideUploadButton = $hideUploadButton;
        return $this;
    }

    /**
     * 如果你不想自己存储，则可以忽略此属性。
     * @param string $stateTextMap
     * @return $this
     */
    public function fileField(string $stateTextMap = 'file')
    {
        $this->fileField = $stateTextMap;
        return $this;
    }

    /**
     * boolean或{"aspectRatio":""}
     * 用来设置是否支持裁剪。
     * crop.aspectRatio    number        裁剪比例。浮点型，默认 1 即 1:1，如果要设置 16:9 请设置 1.7777777777777777 即 16 / 9。。
     * crop.rotatable    boolean    false    裁剪时是否可旋转
     * crop.scalable    boolean    false    裁剪时是否可缩放
     * crop.viewMode    number    1    裁剪时的查看模式，0 是无限制
     * @param string $crop
     * @return $this
     */
    public function crop(string $crop = '')
    {
        $this->crop = $crop;
        return $this;
    }

    /**
     * 裁剪文件格式
     * @param string $cropFormat
     * @return $this
     */
    public function cropFormat(string $cropFormat = 'image/png')
    {
        $this->cropFormat = $cropFormat;
        return $this;
    }

    /**
     *    裁剪文件格式的质量，用于 jpeg/webp，取值在 0 和 1 之间
     * @param int $cropQuality
     * @return $this
     */
    public function cropQuality(int $cropQuality = 1)
    {
        $this->cropQuality = $cropQuality;
        return $this;
    }

    /**
     *    限制图片大小，超出不让上传。
     * 属性名    类型    默认值    说明
     * width    number        限制图片宽度。
     * height    number        限制图片高度。
     * minWidth    number        限制图片最小宽度。
     * minHeight    number        限制图片最小高度。
     * maxWidth    number        限制图片最大宽度。
     * maxHeight    number        限制图片最大高度。
     * aspectRatio    number        限制图片宽高比，格式为浮点型数字，默认 1 即 1:1，如果要设置 16:9 请设置 1.7777777777777777 即 16 / 9。 如果不想限制比率，请设置空字符串。
     * @param array $limit
     * @return $this
     */
    public function limit(array $limit)
    {
        $this->limit = $limit;
        return $this;
    }

    /**
     * 默认占位图地址
     * @param string $frameImage
     * @return $this
     */
    public function frameImage(string $frameImage)
    {
        $this->frameImage = $frameImage;
        return $this;
    }

    /**
     * 是否开启固定尺寸,若开启，需同时设置 fixedSizeClassName
     * @param bool $fixedSize
     * @return $this
     */
    public function fixedSize(bool $fixedSize)
    {
        $this->fixedSize = $fixedSize;
        return $this;
    }

    /**
     * 开启固定尺寸时，根据此值控制展示尺寸。例如h-30,即图片框高为 h-30,AMIS 将自动缩放比率设置默认图所占位置的宽度，最终上传图片根据此尺寸对应缩放。
     * @param string $fixedSizeClassName
     * @return $this
     */
    public function fixedSizeClassName(string $fixedSizeClassName)
    {
        $this->fixedSizeClassName = $fixedSizeClassName;
        return $this;
    }

    /**
     * 表单反显时是否执行 autoFill
     * @param bool $initAutoFill
     * @return $this
     */
    public function initAutoFill(bool $initAutoFill)
    {
        $this->initAutoFill = $initAutoFill;
        return $this;
    }

    /**
     * 属性名    类型    说明
     * name    string    图片名称
     * value    string    上传成功后返回的 url
     * state    string    文件当前状态,值可为 pending uploaded invalid
     * error    string    错误信息
     * @param array $FileValue
     * @return $this
     */
    public function FileValue(array $FileValue)
    {
        $this->FileValue = $FileValue;
        return $this;
    }
}